import csv

def calculate_bmr(weight, height, age, gender):
    """根据哈里斯-贝内迪克特方程计算BMR。"""
    if gender.lower() == 'male':
        return 88.362 + (13.397 * weight) + (4.799 * height) - (5.677 * age)
    elif gender.lower() == 'female':
        return 447.593 + (9.247 * weight) + (3.098 * height) - (4.330 * age)
    else:
        raise ValueError("性别只能是 'male' 或 'female'。")

def parse_input(user_input):
    """解析用户输入的字符串，将其分割成体重、身高、年龄和性别，并检查是否在指定范围内。"""
    try:
        weight, height, age, gender = user_input.split(',')
        weight = float(weight)
        height = float(height)
        age = float(age)
        gender = gender.strip()

        # 设置身高、年龄、体重的范围
        height_range = (0, 300)  # 身高范围：0-300厘米
        age_range = (0, 120)      # 年龄范围：0-120岁
        weight_range = (0, 250)   # 体重范围：0-250公斤

        # 检查身高、年龄、体重是否在范围内
        if not (height_range[0] <= height <= height_range[1]):
            raise ValueError(f"身高必须在 {height_range[0]} 到 {height_range[1]} 厘米之间。")
        if not (age_range[0] <= age <= age_range[1]):
            raise ValueError(f"年龄必须在 {age_range[0]} 到 {age_range[1]} 岁之间。")
        if not (weight_range[0] <= weight <= weight_range[1]):
            raise ValueError(f"体重必须在 {weight_range[0]} 到 {weight_range[1]} 公斤之间。")

        return weight, height, age, gender
    except ValueError as e:
        print(f"输入错误：{e}")
        return None

def export_to_csv(data, filename="bmr_data.csv"):
    """将数据导出为CSV文件。"""
    with open(filename, mode='a', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(["体重(公斤)", "身高(厘米)", "年龄(岁)", "性别", "BMR(卡路里/天)"])
        for item in data:
            writer.writerow(item)
def main():
    print("欢迎使用BMR计算器！请输入体重（公斤）、身高（厘米）、年龄（岁）和性别（'male' 或 'female'），用逗号分隔。")
    print("输入数据范围提示：")
    print("身高范围：0-300厘米")
    print("年龄范围：0-120岁")
    print("体重范围：0-250公斤")

    # 初始化一个列表来存储BMR计算结果
    bmr_data = []

    while True:
        user_input = input("请输入数据：")
        result = parse_input(user_input)

        if result is None:
            continue

        weight, height, age, gender = result
        bmr = calculate_bmr(weight, height, age, gender)
        print(f"您的基础代谢率（BMR）是：{bmr:.2f} 卡路里/天")

        # 将结果添加到数据列表中
        bmr_data.append([weight, height, age, gender, bmr])

        if input("您是否想要继续计算另一位的BMR？(y/n)：").lower() != 'y':
            break

        # 询问用户是否要导出数据到CSV文件
    if input("您是否要将数据导出到CSV文件？(y/n)：").lower() == 'y':
        export_to_csv(bmr_data)


if __name__ == "__main__":
    main()